﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CppIDE.Core;
using Application = CppIDE.Core.Application;

namespace CppIDE.UI
{

    /// <summary>
    /// Egy ablak az aktuális projekt tulajdonságainak szerkesztéséhez.
    /// </summary>
    public partial class ProjectPropertiesForm : Form
    {

        /// <summary>
        /// A szerkesztendő projekt.
        /// </summary>
        Project project;

        /// <summary>
        /// Konstruktor, létrehoz egy új példányt az aktuális projekthez.
        /// </summary>
        public ProjectPropertiesForm()
        {
            project = Application.getInstance().ActiveProject;
            InitializeComponent();
        }

        /// <summary>
        /// Konstruktor, létrehoz egy új példányt a megadott projekthez.
        /// </summary>
        /// <param name="project">A szerkesztendő projekt</param>
        public ProjectPropertiesForm(Project project)
        {
            this.project = project;
            InitializeComponent();
        }

        /// <summary>
        /// Az Ok gomb eseménykezelője: bezárja az ablakot.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonOk_Click(object sender, EventArgs e)
        {
            Close();
        }

        /// <summary>
        /// Az ablak megjelenítéskor hajtódik végre: beállítja a mezőket a projekt
        /// tulajdonságainak megfelelően.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ProjectPropertiesForm_Load(object sender, EventArgs e)
        {
            projectNameTextBox.Text = project.Name;
            projectDirTextBox.Text = project.DirPath;
            if (project.Output == null)
            {
                outputTextBox.Text = "";
            }
            else
            {
                outputTextBox.Text = project.Output.FullPath;
            }
            compilerParamsTextBox.Text = project.CompilerParams;
            linkerParamsTextBox.Text = project.LinkerParams;
        }

        /// <summary>
        /// Az ablak bezárásakor hajtódik vétre: visszaírja a projekt tulajdonságait
        /// a mezők alapján. De nem menti a projektet!
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ProjectPropertiesForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            project.Name = projectNameTextBox.Text;
            project.DirPath = projectDirTextBox.Text;
            if (outputTextBox.Text.Equals(""))
            {
                project.Output = null;
            }
            else
            {
                project.Output = new ExecutableFile(outputTextBox.Text);
            }
            project.CompilerParams = compilerParamsTextBox.Text;
            project.LinkerParams = linkerParamsTextBox.Text;
        }

        /// <summary>
        /// A projekt könyvtárának tallózása.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void projectDirButton_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            dialog.SelectedPath = projectDirTextBox.Text;
            DialogResult result = dialog.ShowDialog(this);
            if (result == DialogResult.OK)
            {
                projectDirTextBox.Text = dialog.SelectedPath;
                if (outputTextBox.Text.Equals(""))
                {
                    outputTextBox.Text = dialog.SelectedPath+"\\output.exe";
                }
            }
        }

        /// <summary>
        /// A projekt kimenetének tallózása.
        /// </summary>
        private void outputButton_Click(object sender, EventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "Futtatható fájl (*.exe)|*.exe";
            Application application = Application.getInstance();
            if (!projectDirTextBox.Text.Equals(""))
            {
                dialog.InitialDirectory = projectDirTextBox.Text;
            }
            if (dialog.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            outputTextBox.Text = dialog.FileName;
        }

    }

}
